package com.hk.core.autoconfigure.web.servlet;

import com.hk.core.authentication.api.SecurityContextUtils;
import com.hk.core.web.Webs;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;



/**
 * 使用 jwt 认证时，不需要从session 认证，而前端传入 access_token 或者请求头添加 Authorization 信息认证
 * 1 、需要 配置 Spring Security 不从 session 中获取认证信息，如:
 * sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
 * 2、并配置此 Interceptor 在一次请求完成后，删除 session中的值，尤其要删除 session中的 scopedTarget.oauth2ClientContext
 *
 * @author Kevin
 */
public class CleanSessionHandlerInterceptor implements HandlerInterceptor {

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        if (SecurityContextUtils.isAuthenticated()) {
            // scopedTarget.oauth2ClientContext 这个session 一定要删除，不然单点退出时就不会退出客户端
            // 在使用 jwt 登陆认证时，请求完成后，清除所有session，用户使用 token认证
            Webs.removeAllSessionAttribute(request);
        }
    }
}
